﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2022 北京超维景生物科技有限公司 保留所有权利。
 * CLR版本：4.0.30319.42000
 * 文件名：Kernel
 * 
 * 创建者：huangyang
 * 电子邮箱：huangyang@tvscope.cn
 * 创建时间：2023/2/15 14:07:37
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ImageK.Gui;
using ImageK.Measure;
using ImageK.Process;

namespace ImageK.Plugin.Filter
{
    /// <summary>
    /// Implements the Flip and Rotate commands in the Image/Transform submenu.
    /// </summary>
    public class Transformer: BasePlugInFilter
    {
		private ImagePlus imp;
		private string arg;
		private Overlay overlay;
		private bool firstSlice = true;

		public override int setup(string arg, ImagePlus imp)
		{
			this.arg = arg;
			this.imp = imp;
			if (imp != null)
				overlay = imp.getOverlay();
			if (arg.Equals("fliph") || arg.Equals("flipv"))
				return IJ.setupDialog(imp, DOES_ALL + NO_UNDO);
			else
				return DOES_ALL + NO_UNDO + NO_CHANGES;
		}

		public override void run(ImageProcessor ip)
		{
			Calibration cal = imp.getCalibration();
			bool transformOrigin = cal.xOrigin != 0 || cal.yOrigin != 0;
			if (arg.Equals("fliph"))
			{
				ip.flipHorizontal();
				// Rectangle r = ip.getRoi();
				// if (transformOrigin && r.x == 0 && r.y == 0 && r.width == ip.getWidth() && r.height == ip.getHeight())
				// 	cal.xOrigin = imp.getWidth() - 1 - cal.xOrigin;
				return;
			}
			// if (arg.equals("flipv"))
			// {
			// 	ip.flipVertical();
			// 	Rectangle r = ip.getRoi();
			// 	if (transformOrigin && r.x == 0 && r.y == 0 && r.width == ip.getWidth() && r.height == ip.getHeight())
			// 		cal.yOrigin = imp.getHeight() - 1 - cal.yOrigin;
			// 	return;
			// }
			// if (arg.equals("right") || arg.equals("left"))
			// {
			// 	StackProcessor sp = new StackProcessor(imp.getStack(), ip);
			// 	ImageStack s2 = null;
			// 	if (arg.equals("right"))
			// 	{
			// 		s2 = sp.rotateRight();
			// 		rotateOverlay(90);
			// 		if (transformOrigin)
			// 		{
			// 			double xOrigin = imp.getHeight() - 1 - cal.yOrigin;
			// 			double yOrigin = cal.xOrigin;
			// 			cal.xOrigin = xOrigin;
			// 			cal.yOrigin = yOrigin;
			// 		}
			// 	}
			// 	else
			// 	{
			// 		s2 = sp.rotateLeft();
			// 		rotateOverlay(-90);
			// 		if (transformOrigin)
			// 		{
			// 			double xOrigin = cal.yOrigin;
			// 			double yOrigin = imp.getWidth() - 1 - cal.xOrigin;
			// 			cal.xOrigin = xOrigin;
			// 			cal.yOrigin = yOrigin;
			// 		}
			// 	}
			// 	imp.setStack(null, s2);
			// 	double pixelWidth = cal.pixelWidth;
			// 	cal.pixelWidth = cal.pixelHeight;
			// 	cal.pixelHeight = pixelWidth;
			// 	if (!cal.getXUnit().equals(cal.getYUnit()))
			// 	{
			// 		String xUnit = cal.getXUnit();
			// 		cal.setXUnit(cal.getYUnit());
			// 		cal.setYUnit(xUnit);
			// 	}
			// 	return;
			// }
		}
	}
}
